Matriz de Confusão, Kappa e Mapas de Probabilidade
Geotecnologias e SIG
Universidade Estadual de Feira de Santana (UEFS)
Objetivo Central
Compreender as métricas de avaliação da qualidade de mapas de uso e cobertura da terra produzidos por classificação supervisionada, e implementar uma avaliação completa no Google Earth Engine.
Um mapa de uso da terra produzido por classificação supervisionada é uma estimativa, não a “verdade”.
Mapas sem avaliação de acurácia podem levar a:
“A map without accuracy assessment is just a pretty picture.” — Foody, 2002
O processo de avaliação segue quatro etapas principais:
| Etapa | Descrição |
|---|---|
| 1. Plano amostral | Definir quantidade e distribuição espacial das amostras de referência |
| 2. Coleta de referência | Classificar visualmente cada ponto amostral (verdade de campo) |
| 3. Matriz de confusão | Comparar classe mapeada × classe de referência |
| 4. Métricas de acurácia | Calcular acurácia global, do produtor, do usuário e Kappa |
Fórmula de Cochran (1977) adaptada:
\[n = \frac{Z^2 \times p \times (1-p)}{e^2}\]
Onde:
\(n \approx 384\) amostras (mínimo global)
A matriz de confusão (ou de erro) cruza as classes mapeadas (linhas) com as classes de referência (colunas):
| Ref: Floresta | Ref: Agricultura | Ref: Água | Total Mapeado | |
|---|---|---|---|---|
| Map: Floresta | 85 | 10 | 2 | 97 |
| Map: Agricultura | 5 | 78 | 3 | 86 |
| Map: Água | 0 | 2 | 45 | 47 |
| Total Referência | 90 | 90 | 50 | 230 |
\[OA = \frac{\sum_{i=1}^{k} n_{ii}}{N}\]
Exemplo: \(\frac{85 + 78 + 45}{230} = 0{,}904 = 90{,}4\%\)
\[PA_j = \frac{n_{jj}}{\sum_{i=1}^{k} n_{ij}}\]
Mede a probabilidade de uma classe real ser corretamente mapeada (omissão).
\[UA_i = \frac{n_{ii}}{\sum_{j=1}^{k} n_{ij}}\]
Mede a probabilidade de um pixel mapeado realmente pertencer àquela classe (comissão).
| Métrica | Perspectiva | Erro associado |
|---|---|---|
| PA | Quem está no campo | Omissão |
| UA | Quem usa o mapa | Comissão |
O Kappa (\(\kappa\)) mede a concordância entre classificação e referência, descontando o acerto por acaso:
\[\kappa = \frac{OA - P_e}{1 - P_e}\]
Onde \(P_e\) é a concordância esperada ao acaso:
\[P_e = \frac{\sum_{i=1}^{k} (n_{i+} \times n_{+i})}{N^2}\]
| Kappa | Qualidade |
|---|---|
| < 0,20 | Ruim |
| 0,21 – 0,40 | Razoável |
| 0,41 – 0,60 | Moderada |
| 0,61 – 0,80 | Boa |
| 0,81 – 1,00 | Excelente |
Fonte: Landis & Koch (1977)
Pontius & Millones (2011) argumentam que o Kappa:
\[F1_i = 2 \times \frac{PA_i \times UA_i}{PA_i + UA_i}\]
Na graduação: aprendam Kappa (ainda amplamente usado), mas conheçam as limitações e citem as alternativas em relatórios e TCC.
Classificadores como Random Forest e SVM atribuem a cada pixel não apenas uma classe vencedora, mas também a probabilidade de pertencer a cada classe.
Atribui a cada pixel o valor de probabilidade da classe com maior score. Indica a confiança da classificação:
// 1. Área de estudo: Feira de Santana, BA
var municipio = ee.FeatureCollection('FAO/GAUL/2015/level2')
.filter(ee.Filter.eq('ADM2_NAME', 'Feira de Santana'));
// 2. Imagem Sentinel-2 (2024, período seco)
var s2 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(municipio)
.filterDate('2024-06-01', '2024-09-30')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 10))
.median()
.clip(municipio);
// 3. Bandas para classificação
var bandas = ['B2', 'B3', 'B4', 'B8', 'B11', 'B12'];
var imagem = s2.select(bandas);// 4. Amostras de treinamento (FeatureCollection com propriedade 'classe')
// 0=Água, 1=Vegetação, 2=Solo_exposto, 3=Urbano
var treinamento = imagem.sampleRegions({
collection: amostras_treino,
properties: ['classe'],
scale: 10
});
// 5. Treinar Random Forest
var classificador = ee.Classifier.smileRandomForest(100)
.train(treinamento, 'classe', bandas);
// 6. Classificar imagem
var classificado = imagem.classify(classificador);
Map.addLayer(classificado, {min: 0, max: 3,
palette: ['blue', 'green', 'brown', 'gray']}, 'Classificação');// 7. Amostras de validação (independentes do treinamento)
var validacao = imagem.sampleRegions({
collection: amostras_validacao,
properties: ['classe'],
scale: 10
});
// 8. Classificar amostras de validação
var validado = validacao.classify(classificador);
// 9. Matriz de confusão
var matriz = validado.errorMatrix('classe', 'classification');
print('Matriz de Confusão:', matriz);
print('Acurácia Global:', matriz.accuracy());
print('Kappa:', matriz.kappa());
print('Acurácia do Produtor:', matriz.producersAccuracy());
print('Acurácia do Usuário:', matriz.consumersAccuracy());// 10. Classificação com probabilidades (Random Forest)
var classificador_prob = ee.Classifier.smileRandomForest(100)
.setOutputMode('MULTIPROBABILITY')
.train(treinamento, 'classe', bandas);
var probabilidades = imagem.classify(classificador_prob);
// 11. Extrair probabilidade máxima por pixel
var prob_max = probabilidades.arrayReduce(ee.Reducer.max(), [0])
.arrayGet([0])
.rename('prob_max');
// 12. Visualizar mapa de confiança
Map.addLayer(prob_max, {min: 0.3, max: 1.0,
palette: ['red', 'yellow', 'green']}, 'Confiança da Classificação');Interpretação: áreas em vermelho indicam baixa confiança do classificador — priorize coleta de campo nessas regiões.
Obrigado!
Luiz Diego Vidal Santos
Universidade Estadual de Feira de Santana (UEFS)
UEFS | Geotecnologias e SIG | Avaliação de Incerteza em Classificação